package tests;

import java.sql.Date;
import java.sql.ResultSet;
import java.util.ArrayList;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

import com.davinci.freemarket.dataAccessLayer.accessdata.publicacion.PublicacionDAO;
import com.davinci.freemarket.dataModelLayer.model.DBAttibuteModel;
import com.davinci.freemarket.dataModelLayer.model.PublicationModel;
import com.microsoft.sqlserver.jdbc.SQLServerException;


/**
 * @author Nicolas Reymundo
 *
 */


public class PublicacionUnitTesting {

	/**
	 * @throws java.lang.Exception
	 */
	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
	}

	/**
	 * @throws java.lang.Exception
	 */
	@AfterClass
	public static void tearDownAfterClass() throws Exception {
	}

	/**
	 * @throws java.lang.Exception
	 */
	@Before
	public void setUp() throws Exception {
	}

	/**
	 * @throws java.lang.Exception
	 */
	@After
	public void tearDown() throws Exception {
	}
	
	
	@Test
	public void selectPublicacion(){
		PublicacionDAO publicaciondao = new PublicacionDAO();
		
		ArrayList<DBAttibuteModel> conditions = new ArrayList<DBAttibuteModel>();
		conditions.add(new DBAttibuteModel("TITULO", "%Test%"));
		conditions.add(new DBAttibuteModel("DESCRIPCION", "%prueba%"));
		
		ArrayList<PublicationModel> rs = publicaciondao.selectPublicacion(conditions);
		Assert.assertTrue(rs != null);
		String result = "";
		
		for (PublicationModel publicationModel : rs) {
			result += publicationModel.getTitle() + ", " + publicationModel.getPrice() + ", " +publicationModel.getDetails() + ", " +publicationModel.getPublicationId();
			System.out.println(result);
		}
	}
	
	
	
	@Test
	/*
	 * No tengo *NI* idea si el parametro "Date.valueOf(STRING)" se lleva bien con SQL, probablemente no. 
	 */
	public void addPublicacion(){
		PublicacionDAO publicaciondao = new PublicacionDAO();
		int rs = publicaciondao.addPublicacion("publicacionTest", "pruebaDePublicacion", 11, 1234, Date.valueOf("2011-07-05"), "statusPrueba", 1);
		Assert.assertTrue(rs != 0);
	}
	
	@Test
	/*
	 * No tengo *NI* idea si el parametro "Date.valueOf(STRING)" se lleva bien con SQL, probablemente no. 
	 */
	public void modifyPublicacion(){
		PublicacionDAO publicaciondao = new PublicacionDAO();
		int rs = publicaciondao.modifyPublicacion(4, "publicacionTestUpdated", "descripcionUpdated", 11, 1234, Date.valueOf("2011-07-05"), "pruebaUpdt", 1);
		Assert.assertTrue(rs != 0);
	}
	
	@Test
	public void deletePublicacion(){
		PublicacionDAO publicaciondao = new PublicacionDAO();
		int rs = publicaciondao.deletePublicacion(4);
		Assert.assertTrue(rs != 0);
	}
	
	
}
